<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
  </head>
  <body>
    <script type="text/javascript">
      /**
       * 看到这题的题干暗示，小友或许已经想到了浅拷贝与深拷贝，
       * 既然不能改变原数组，那必须滴深拷贝呀，对吧，对吗? 对个啥呀🤣🤣🤣
       * 
       * 这里拓展一下知识点：
       * 1. 函数参数：函数参数如果是基本数据类型是传值的，
       *    但如果是对象类型则是引用，也就是说传过来的arr确实不能直接操作
       *    当然，函数返回值也是一样的
       * 
       * 2. 浅拷贝：（基本上能直接用的函数都是浅拷贝）
       *    浅拷贝指的是创建一个新的对象，但是只复制原始对象的基本数据类型，而不复制引用指向的对象
       *    说人话就是基本类型直接赋值，对象类型只拷贝第一层的值，深层的对象只拷贝其地址
       *    也就是说在拷贝的内容有深层的对象时，改变拷贝过来的值也会改变
       *    说白了就是相当于开了一家别人一模一样的的店，但进货的渠道是一样的
       * 
       * 3. 深拷贝顾名思义就是完全复制一份，相当于从店铺到原料加工制作都复刻了一份，不受另一家店的影响
       * 
       * 这道题的数组是内含更深的对象吗?不含对吧，那浅拷贝和深拷贝的效果不是一样的嘛
       * 只要别直接使用参数传过来的值就行
       */
      const _delete = (array, index) => {
        // 补全代码
        let newarray = array.concat();//浅拷贝
        // let newarray = [...array];//浅拷贝
        //let newarray = array.slice();//浅拷贝
        //let newarray = array.map(item => item);//浅拷贝
        //let newarray = JSON.parse(JSON.stringify(array));//深拷贝
        newarray.splice(index, 1);
        return newarray;
      };
    //   let arr = [1,2, 3, 4, 5, 6, 7, 8, 9, 10];
    //   let newArr = _delete(arr, 0);
    //   console.log(arr);//原数组没变
    //   console.log(newArr);
    </script>
  </body>
</html>
